#!usr/bin/env python  
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: bag.py 
@version:
@time: 2024/01/11 
"""


def bag(matrix, max):
    re = 0
    re_list = [0 for _ in range(len(matrix))]
    # 按价值排序
    matrix.sort(key=lambda x: x[1] / float(x[0]), reverse=True)
    # 记得物品一起排序了
    for i in range(len(matrix)):
        # 如果取出质量小于最大值
        if matrix[i][0] < max:
            # 价值总量增加
            re += matrix[i][1]
            # 最大容量减少
            max -= matrix[i][0]
            # 当前物品完全放入
            re_list[i] = 1
        else:
            # 否则说明已经不能完全放入物品了，计算放入物品百分比，max *  价值/重量=剩余可放入重量*单位价值
            re += max * matrix[i][1] / float(matrix[i][0])
            # 计算占比，剩余可放入重量/当前物品重量
            re_list[i] = max / float(matrix[i][0])
            break
    return matrix, re_list, re


matrix = [(40, 20), (120, 50), (100, 30), (60, 10)]
M = 240

res = bag(matrix, M)
print(res)
